package day20;

import java.net.ServerSocket;
import java.net.Socket;

// 服务器
public class Server {// 服务器类

    public static void main(String[] args) {// 主方法
        Server server = new Server();// 创建服务器对象
        server.start();// 启动服务器
    }

    ServerSocket serverSocket;// 服务器套接字

    //建立端口号
    Server() {//构造方法
        try {
            System.out.println("服务器正在启动");//打印服务器正在启动
            serverSocket = new ServerSocket(8888);//创建一个socket对象，指定服务器的ip地址和端口号
            System.out.println("服务器启动成功");//打印服务器启动成功
        } catch (Exception e) {//捕获异常
            e.printStackTrace();//打印异常信息
        }

    }

    public void start() {//创建启动服务器
        try {
            System.out.println("等待客户端连接.......");//打印等待客户端连接
            Socket socket = serverSocket.accept();//等待客户端连接
            System.out.println("一个客户端连接了"); //打印客户端连接成功
            ClientHandler handler = new ClientHandler(socket);
            handler.run();
        } catch (Exception e) {   //捕获异常
            e.printStackTrace();//打印异常信息
        }

    }

}
/*
1. 启动服务器
2.创建端口号为8888的ServerSocket对象
3. 调用ServerSocket对象的accept方法，等待客户端连接
3.1  accept把监听的客户端连接信息都交给了socket
3.2  Socket对象保存了客户端的信息没有人帮助我服务器进行解析，所以服务器就要找一个榜首来解析socket里村的内容并做输出
3.3  创建一个ClientHandler对象，把socket传出去，（ClientHandler这个类就是server找来的榜首帮我做解析的）
4.ClientHandler类里有一个socket的成员变量，我们把socket作为参数的形式给ClientHandler类穿出去，这样ClientHandler类里就可以拿到socket里的内容了
5.通过server服务器的handler对象调用run方法（这个run方法就是ClientHandler类里的run方法）
 */
